﻿'''
题目描述
小明来到学校当老师，需要将学生按考试总分或单科分数进行排名，你能帮帮他吗？
输入描述
第 1 行输入两个整数，学生人数 n 和科目数量 m。
0 < n < 100
0 < m < 10
第 2 行输入 m 个科目名称，彼此之间用空格隔开。
科目名称只由英文字母构成，单个长度不超过10个字符。
科目的出现顺序和后续输入的学生成绩一一对应。
不会出现重复的科目名称。
第 3 行开始的 n 行，每行包含一个学生的姓名和该生 m 个科目的成绩（空格隔开）
学生不会重名。
学生姓名只由英文字母构成，长度不超过10个字符。
成绩是0~100的整数，依次对应第2行种输入的科目。
第n+2行，输入用作排名的科目名称。若科目不存在，则按总分进行排序。
输出描述
输出一行，按成绩排序后的学生名字，空格隔开。成绩相同的按照学生姓名字典顺序排序。
示例1
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 98
minmin 100 82
shuxue

输出
xiaohua fangfang minmin
说明
按照shuxue成绩排名依次是 xiaohua fangfang minmin
示例2
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 90 95
zongfen
输出
fangfang minmin xiaohua
说明
排序科目不存在，按总分排序 , fangfang 和 minmin 总分相同，按姓名的字典序顺序， fangfang 排在前面
'''
from collections import defaultdict
#定义学生类,因为要用到defaultdict所以需要导入相应包
class Student():
    #用姓名初始化，其他属性采用默认
    def __init__(self,name):
        self.name = name        #学生姓名
        self.total_score = 0    #总分
        self.scores = defaultdict(int)  #存储各科成绩的字典，默认值为0
    #添加成绩的方法，同时累加到总分
    def add_score(self,subject,score):
        self.total_score += int(score)
        self.scores[subject] = int(score)
    #获取指定科目的成绩:直接使用可以不写该方法
    def get_score(self,subject):
        return self.scores[subject]

#主函数
def main():
    #读取输入n个学生，m个科目
    n,m = map(int,(input().split()))
    #读取科目名称
    course_name = input().split()
    #读取每个学生姓名和每个科目的成绩
    student_list = []
    for _ in range(n):
        stu_info = input().split()
        student = Student(stu_info[0])
        #添加各科成绩并累加总分
        for i in range(m):
            student.add_score(course_name[i],stu_info[i + 1])
        student_list.append(student)
    #读取要查询的科目
    query_course = input()
    #对学生列表进行排序，使用lamda表达时：lambda s: (s.score,s.name)即如果分数相同按name字典排序
    student_list.sort(key= lambda s: (-s.scores[query_course] if query_course in course_name else -s.total_score,s.name))
    #输出结果
    print(' '.join(s.name for s in student_list))

if __name__ == '__main__':
    main()
